# __log__.py
import os
import logging
from logging.config import dictConfig
from datetime import datetime
from settings import BASE_DIR

# # 日志目录
# LOG_DIR = "logs"
# os.makedirs(LOG_DIR, exist_ok=True)

# 日志格式
LOG_FORMAT = "%(asctime)s - %(levelname)s - %(endpoint)s - %(message)s"
DATE_FORMAT = "%Y-%m-%d %H:%M:%S"

def setup_logging():
    """
    配置日志
    """
    # 获取当前日期
    today = datetime.now().strftime("%Y-%m-%d")

    # 日志文件路径（以当天日期命名）
    log_file = os.path.join(_ALL_LOG_PATH, 'all.log')

    # 创建 FileHandler，每天创建一个新的日志文件
    handler = logging.FileHandler(
        filename=log_file,       # 日志文件路径
        encoding="utf-8",        # 文件编码
    )

    # 设置日志格式
    formatter = logging.Formatter(LOG_FORMAT, datefmt=DATE_FORMAT)
    handler.setFormatter(formatter)

    # 配置根日志记录器
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)  # 设置日志级别
    logger.addHandler(handler)

    # 返回配置好的日志记录器
    return logger


class EndpointFilter(logging.Filter):
    def filter(self, record):
        # 假设这里可以通过某种方式获取当前的 endpoint
        # 这里只是一个示例，实际应用中需要根据你的具体需求实现
        record.endpoint = ""  # 替换为实际的 endpoint 获取逻辑
        return True
    

_LOG_DIR = os.path.join(BASE_DIR, "logs")
os.makedirs(_LOG_DIR, exist_ok=True)

# all logs
_ALL_LOG_PATH = os.path.join(_LOG_DIR,'{}'.format(datetime.now().strftime('%Y-%m-%d')))
os.makedirs(_ALL_LOG_PATH, exist_ok=True)

LOGGING = {
    'version': 1,
    'formatters': {
        'standard': {
            'format': '%(asctime)s [%(levelname)s]- %(endpoint)s  - %(pathname)s - line:%(lineno)d %(funcName)s: %(message)s',
            'datefmt': '%Y-%m-%d %H:%M:%S'
        },
        'simple': {
            'format': '%(asctime)s [%(levelname)s] - %(endpoint)s: %(message)s',
            'datefmt': '%Y-%m-%d %H:%M:%S'
        },
    },
    'handlers': {
        'default': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'formatter': 'standard',
            'filename': os.path.join(_ALL_LOG_PATH, 'all.log'),
            'maxBytes': 1024 * 1024 * 5,  # 5 MB
            'backupCount': 5,
            'encoding': 'utf-8',
        },
        'simple': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(_ALL_LOG_PATH, 'simple.log'),
            'formatter': 'simple',
            'maxBytes': 1024 * 1024 * 5,  # 5 MB
            'backupCount': 5,
            'encoding': 'utf-8',
        },
        'console': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
        },
        'error2file': {
            'level': 'ERROR',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(_ALL_LOG_PATH, 'error.log'),
            'formatter': 'standard',
            'maxBytes': 1024 * 1024 * 5,  # 5 MB
            'backupCount': 5,
            'encoding': 'utf-8',
        },
    },
    'root': {
        'handlers': ['default', 'simple', 'console', 'error2file'],
        'level': 'DEBUG',
        'propagate': False
    },
}

dictConfig(LOGGING)
logger = logging.getLogger()

__all__ = ['logger']